/* 
 * File:   DPago.cpp
 * Author: Arturo
 * 
 * Created on November 27, 2010, 10:48 PM
 */

#include "DPago.h"

DPago* DPago::instancia = NULL;

using namespace std;

DPago::DPago() {
    char linea[10000];

    int id;
    double amortizado;
    string fecha;
    int idcliente;

    ifstream file("pagos.txt");
    if (!file.fail()) {

        while (!file.eof()) {
            file.getline(linea, 10000);
            if (linea[0] == '\0') continue;

            id = atoi(strtok(linea, "_"));
            amortizado = atof(strtok(NULL, "_"));
            fecha = strtok(NULL, "_");
            idcliente = atoi(strtok(NULL, "_"));
            this->Add(new NPago(id, amortizado, fecha, idcliente));
        }

        file.close();
    }
}

DPago::~DPago() {
}

DPago &DPago::GetInstancia() {
    if (instancia == NULL) {
        instancia = new DPago();
    }

    return *instancia;
}

bool DPago::Save() {
    // Si la lista esta vacia, retorno que NO he guardado nada.
    if (!this->Head) {
        return false;
    }

    ofstream file;
    file.open("pagos.txt");

    this->Reset();

    while(this->Current) {
        file << this->Current->Dato->ToDB() << endl;
        this->Next();
    }

    file.close();

    this->Reset();

    return true;
}

Lista* DPago::PagosDelCliente(int idcliente) {
    Lista* r = new Lista();

    this->Reset();

    while(this->Current) {
        if (((NPago*)this->Current->Dato)->GetIdCliente() == idcliente) {
            r->Add(this->Current->Dato);
        }

        this->Next();
    }

    return r;
}

bool DPago::AddFrom(double _amortizado, DCliente* &c) {
    return this->Add(new NPago(_amortizado, c->Current));
}
